package proyectoFC_2_3_3.koyicabuto.services;

import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import proyectoFC_2_3_3.koyicabuto.funciones.Funciones;
import proyectoFC_2_3_3.koyicabuto.funciones.FuncionesBaseDatos;
import proyectoFC_2_3_3.koyicabuto.funciones.FuncionesWebService;
import android.app.Service;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

/**
 * Clase en la que cada cierto tiempo marcado por la constante UPDATE_INTERVAL, enviamos al webService nuestra posicion actual.S
 * @author jmartin
 *
 */
public class MyLocationService extends Service {
	
	private Timer timer = new Timer();
	private static final long UPDATE_INTERVAL = 600000;
	
	private FuncionesBaseDatos  funcionesBaseDatos  = new FuncionesBaseDatos();
	private FuncionesWebService funcionesWebService = new FuncionesWebService();
	private Funciones funciones = new Funciones();
	private SQLiteDatabase gruposDataBase = null;
	
	private final IBinder mBinder = new MyBinder();
	
	private String coordenadas = null;
 
	public void onCreate() {
		super.onCreate();
		pollForUpdates();
	}
 
	private void pollForUpdates() {
		timer.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				
				//Conectamos con el WebService para obtener las coordenadas actualizadas.
				conectaWebService();
				
				//Metodo con el que actualizamos las coordenadas obtenidas anteriormente en la BB.DD.
				actualizaCooredenadasBBDD();
				
				System.out.println("RUN del Service");
			}
		}, 0, UPDATE_INTERVAL);
		Log.i(getClass().getSimpleName(), "Timer started.");
	}
 
	@Override
	public void onDestroy() {
		super.onDestroy();
		
		if (timer != null) {
			timer.cancel();
		}
		if(gruposDataBase != null){
			funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
		}
		
		Log.i(getClass().getSimpleName(), "Timer stopped.");
	}
 
	@Override
	public IBinder onBind(Intent arg0) {
		return mBinder;
	}
 
	public class MyBinder extends Binder {
		public MyLocationService getService() {
			return MyLocationService.this;
		}
	}
	
	public void actualizaCooredenadasBBDD(){
		
		List<Object[]> listaCoordenadas = funciones.trataCoordenadas(coordenadas);
		String numero = null;
		Double longitud = null;
		Double latitud = null;
		String updateCoordenadas = null;
		
		gruposDataBase = funcionesBaseDatos.conectaWritableBaseDeDatos(this);
		
		if(gruposDataBase != null){
	
			for(Object[] array:listaCoordenadas){
				numero = (String)array[0];
				longitud = (Double)array[1];
				latitud = (Double)array[2];
				
				updateCoordenadas = "UPDATE PERSONAL_GRUPOS " +
								 	"SET PG_LONGITUD = " + longitud + ", " +
								 	"PG_LATITUD = " + latitud + " " +
								 	"WHERE PG_PER_NUMERO = '" + numero + "' ";
				
				gruposDataBase.execSQL(updateCoordenadas);
			}
			funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
			
			System.out.println("Coordenadas actualizadas en BB.DD.");
		}
	}
	
	/*
	 *Metodo en el que leemos cada cierto intervalo de tiempo(UPDATE_INTERVAL), las coordenadas que los dispositivos van 
	 *actualizando en el WebService para ir refrescando las posiciones de las personas del grupo en el mapa. 
	 */
	public void conectaWebService(){        
        //Conectamos con el WebService y recibimos las coordenadas
        coordenadas = funcionesWebService.conectaMetodoWebService("obtenerLocalizaciones", null);
        
	}
}